Skip to content

Feature/57 auth implement sso gcp - #66

Open
liamburja wants to merge 3 commits into
mainfrom
feature/57-auth-implement-sso-gcp
Open

liamburja wants to merge 3 commits into
mainfrom
feature/57-auth-implement-sso-gcp

Conversation

@liamburja

@liamburja liamburja commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Login con Google (SSO) por organización

Cada organización puede configurar su propio cliente OAuth de Google y permitir el login con Google, que convive con el login de email y contraseña.

Qué incluye

  • Configuración por organización en Ajustes → Global:

    • Client ID, Client Secret y dominios de Workspace permitidos (opcional).
    • El secret se guarda cifrado (AES-256-GCM, clave derivada de GITDB_ENCRYPTION_KEY) y nunca se devuelve a la UI.
    • Guardar requiere organization:settings:update.
  • Flujo OIDC (Authorization Code + PKCE) en /auth/sso/google/start y /auth/sso/google/callback:

    • state y nonce viajan en una cookie firmada de un solo uso.
    • El id_token se verifica contra el JWKS de Google (firma, iss, aud, exp).
    • Sin dependencias nuevas.
  • Acceso solo por invitación:

    • Solo entra quien ya tiene acceso a la organización o a alguno de sus proyectos. El SSO no crea usuarios ni asigna roles.
    • Se vincula el sub de Google al usuario con el mismo email verificado.
    • Una invitación pendiente se acepta en el primer login con Google.
  • Detección de la organización en el login, en este orden:

    1. ?org=<slug>
    2. La cookie last_org
    3. La única organización con Google activo, si solo hay una

    El guard añade ?org= al redirigir desde /org/<slug>/....

  • Nueva entidad GitDB organization_auth_providers, que se borra junto con la organización.

  • Traducciones es/en para el botón, los errores y los ajustes. SAML sigue siendo solo configuración.

Otros cambios

  • Dockerfile: copia src/notifications a la imagen final. Sin esto, el envío de emails (invitación, recuperar contraseña) fallaba en Docker porque no encontraba las plantillas.
  • README y CLAUDE.md: pasos de configuración en GCP (redirect URI según puerto 5173/3000, cuentas @gmail.com, test users) y nota de que la imagen Docker no incluye cliente SSH para remotos GitDB git@....

Cómo probar

  1. En GCP, crea un cliente OAuth Web application con la redirect URI /auth/sso/google/callback.
  2. En Ajustes → Global de la organización, activa Google y pega el Client ID y el Secret.
  3. Prueba con un usuario invitado: debe entrar en la organización.
  4. Prueba con un usuario no invitado: debe volver al login con el mensaje de "sin acceso".

Tests

  • 44 tests unitarios nuevos: sso.service, google-oidc.client, secret-cipher.service.
  • bun run test, bun run check, bun run lint y bun run build en verde.
  • La E2E de Playwright no arranca por un fallo previo del seed (import de $env), que ya ocurría en main.

🤖 Generated with Claude Code

Related issue

Closes #

Change type

  • Bug fix
  • Feature
  • Documentation
  • Refactor
  • Security or permissions
  • Tests or tooling

Verification

  • bun run check
  • bun run lint
  • bun run test
  • bun run format:check
  • UI tested manually, if applicable

Review notes

Mention migrations, environment variables, security implications, screenshots, known limitations, or follow-up work. Confirm that logs and screenshots contain no secrets.

@liamburja liamburja linked an issue Oct 5, 2026 that may be closed by this pull request
@liamburja
liamburja requested a review from foxkdev October 5, 2026 21:40
@foxkdev

foxkdev commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

@liamburja algo importante a implementar, se debe tener una configuracion de un check de permitir registrase con el dominio, y que todo lo que sea @dominio.com auto registre sin invitacion, para empresas es bastante importante

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Auth] Implement SSO GCP

2 participants